/**
 * 判断值是否与指定数据列表中的某一个值相等<br/>
 * 如果找到某一相等的值，则调用与该值相对应的处理函数；如果没有找到相等的值，则执行默认处理函数
 *
 * @param value 需要进行判断的值
 * @param {Array<[any, () => any] | [any, () => any, () => boolean]>} data 数据列
 * 表，是一个二维数组，每个子数组元素中：
 * - 第一个元素为数据值
 * - 第二个元素为需要进行判断的值与数据值相等时执行的处理函数，
 * - 第三个元素（可选）为需要进行判断的值与数据值相等之外的其他附加条件，附加条件与值是否相等的
 * 条件之间的关系为与（&&）
 * @param {() => any} defaultHandler 没有找到相等的值时，执行的默认处理函数
 * @returns {any} 处理函数的执行结果
 */
export const isAnyEq = (
  value: any,
  data: Array<[any, () => any] | [any, () => any, () => boolean]>,
  defaultHandler: () => any = () => {}
): any => {
  for (let i = 0; i < data.length; i++) {
    const item = data[i]
    if (item.length === 2 && value === item[0]) return item[1]()
    else if (item.length === 3 && value === item[0] && item[2]()) return item[1]()
  }
  return defaultHandler()
}

export type IsAnyEqType = typeof isAnyEq
